package com.chukun.multi.masterslave.reusable;

import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.Future;

/**
 * 任务分发策略的接口
 * @param <T>
 * @param <V>
 */
public interface SubTaskDispatchStrategy<T,V> {

    /**
     * 根据指定的原始任务分解策略，将分解得来的各个子任务派发给一组Slave参与者实例
     * @param slaves 可以接受子任务的一组Salve参与者实例
     * @param taskDivideStrategy 原始任务分解策略
     * @return 遍历该 iterator可得到用于获取子任务处理结果的 Promise
     * @throws InterruptedException
     */
    Iterator<Future<V>> dispatch(Set<? extends SlaveSpec<T,V>> slaves,
                                 TaskDivideStrategy<T> taskDivideStrategy) throws InterruptedException;


}
